Engineers use compression (also called source coding or source encoding) to reduce the bit rate of digital video. Compression decreases the cost of storing and transmitting video information by converting the information into a lower bit rate form. Decompression (also called decoding) reconstructs a version of the original information from the compressed form. A “codec” is an encoder/decoder system.
Over the last two decades, various video codec standards have been adopted, including the H.261, H.262 (MPEG-2 or ISO/IEC 13818-2), H.263 and H.264 (AVC or ISO/IEC 14496-10) standards and the MPEG-1 (ISO/IEC 11172-2), MPEG-4 Visual (ISO/IEC 14496-2) and SMPTE 421M standards. More recently, the HEVC standard is under development. A video codec standard typically defines options for the syntax of an encoded video bitstream, detailing parameters in the bitstream when particular features are used in encoding and decoding. In many cases, a video codec standard also provides details about the decoding operations a decoder should perform to achieve correct results in decoding.
A basic goal of compression is to provide good rate-distortion performance. So, for a particular bit rate, an encoder attempts to provide the highest quality of video. Or, for a particular level of quality/fidelity to the original video, an encoder attempts to provide the lowest bit rate encoded video. In practice, depending on the use scenario, considerations such as encoding time, encoding complexity, encoding resources, decoding time, decoding complexity, decoding resources, overall delay, loss recovery capability, and/or smoothness in playback also affect decisions made during encoding and decoding.
In particular, for scenarios such as video conferencing and other real-time video encoding/decoding, overall delay (or latency) can significantly impact the quality of user experience. Reducing latency improves the user experience. At the same time, to exploit the computational power of newer computer hardware, engineers may try to split up encoding tasks at an encoder, or split up decoding tasks at a decoder, so as to more effectively utilize available resources. Existing approaches to splitting up encoding and decoding tasks may introduce more latency than can be tolerated for real-time applications.